The title of your home page You could put your verification ID in a comment Or, in its own meta tag Or, as one of your keywords Your content is here. The verification ID will NOT be detected if you put it here. آزمایش : اتصال صفحه کلید به میکروکنترلر
 
دانشگاهی
مدیریت ارشد وب
 
 

آزمایش : اتصال صفحه کلید به میکروکنترلر 

اتصال صفحه کلید ماتریسی 16 تایی به میکروکنترلر می باشد و کاربردهای زیادی در اکثر پروژه های مبتنی بر مییکروکنترلر دارد . نقشه ی شماتیک سخت افزار را می توانید از اینجا دانلود کنید و نرم افزار را هم که در زیر مشاهده می کنید همان نرم افزاری است که در کتاب «میکروکنترلر 8051» نوشته ی محمد علی مزیدی برای اتصال صفحه کلید ماتریسی 16 تایی به میکروکنترلر پیشنهاد شده است . با این تفاوت که نرم افزار موجود در کتاب از 2 پورت استفاده می کند ولی نرم افزاری که در اینجا مشاهده می کنید برای استفاده از یک پورت بهینه شده است و برای نمایش اعداد مربوط به کلید های فشرده شده نیز از 4 عدد سون سگمنت که به روش مالتی پلکس بسته شده اند بهره می برد . توضیحات لازم در مورد نرم افزار صفحه کلید را در ذیل آن مشاهده می کنید و در مورد نرم افزار مالتی پلکس هم در آزمایش قبل به طور مفصل توضیح داده شده است .

 

           Zero   Equ   0C0H

            One   Equ   0F9H

            Two   Equ   0A4H

          Three   Equ   0B0H

           Four   Equ   99H

           Five   Equ   92H

            six   Equ   82H

          Seven   Equ   0F8H

          Eight   Equ   80H

           Nine   Equ   90H

             _A   Equ   88H

             _B   Equ   83H

             _C   Equ   0C6H

             _D   Equ   0A1H

             _E   Equ   86H

             _F   Equ   8EH

    

 Timer0_Preload   Equ   -5000

  seven_segment   Data  P0

     KeypadPort   Data  P1

          Yekan   Data  35H

         Dahgan   Data  36H

         Sadgan   Data  37H

    Yekan_Hezar   Data  38H

         Anode1   Bit   P3.0

         Anode2   Bit   P3.1

         Anode3   Bit   P3.2

         Anode4   Bit   P3.3

                  ;*******************************

                  Org   0H

                  Sjmp  Main

                  ;*******************************

                  Org   0BH

                  Ajmp  Multiplex

                  ;*******************************

                  Main:  Mov   Tmod,#01H

                  Mov   IE,#82H

                  Mov   r2,#0

                  Mov   Yekan,#Zero

                  Mov   Dahgan,#Zero

                  Mov   Sadgan,#Zero

                  Mov   Yekan_Hezar,#Zero

                  Mov   Tl0,#low Timer0_Preload

                  Mov   Th0,#high Timer0_Preload

                  Setb  Tr0

         

          Back1:  Mov   KeypadPort,#11110000B

                  Mov   a,KeypadPort

                  Anl   a,#11110000B

                  Cjne  a,#11110000B,Back1

          Back2:  Acall Delay

                  Mov   a,KeypadPort

                  Anl   a,#11110000B

                  Cjne  a,#11110000B,Over

                  Sjmp  Back2

           Over:  Acall Delay

                  Mov   a,KeypadPort

                  Anl   a,#11110000B

                  Cjne  a,#11110000B,Over1

                  Sjmp  Back2

                  ;* * * * * * * * * * * * * * * *

          Over1:  Mov   KeypadPort,#11111110B

                  Mov   a,KeypadPort

                  Anl   a,#11110000B

                  Cjne  a,#11110000B,Row_0

                  ;* * * * * * * * * * * * * * * *

                  Mov   KeypadPort,#11111101B

                  Mov   a,KeypadPort

                  Anl   a,#11110000B

                  Cjne  a,#11110000B,Row_1              

                  ;* * * * * * * * * * * * * * * *

                  Mov   KeypadPort,#11111011B

                  Mov   a,KeypadPort

                  Anl   a,#11110000B

                  Cjne  a,#11110000B,Row_2

                  ;* * * * * * * * * * * * * * * *

                  Mov   KeypadPort,#11110111B

                  Mov   a,KeypadPort

                  Anl   a,#11110000B

                  Cjne  a,#11110000B,Row_3

                  Ajmp  Back2

                  ;* * * * * * * * * * * * * * * *

          Delay:  Mov   40h,#50

          Back3:  Mov   41h,#100

                  Djnz  41h,$

                  Djnz  40h,Back3

                  Ret

                  ;* * * * * * * * * * * * * * * *

          Row_0:  Mov   Dptr,#Kcode0

                  Sjmp  Find

          Row_1:  Mov   Dptr,#Kcode1

                  Sjmp  Find

          Row_2:  Mov   Dptr,#Kcode2

                  Sjmp  Find

          Row_3:  Mov   Dptr,#Kcode3

                  ;* * * * * * * * * * * * * * * *

           Find:  Rlc   a

                  Jnc   Match

                  Inc   dptr

                  Sjmp  Find

                  ;* * * * * * * * * * * * * * * *

          Match:  Clr   a

                  Movc  a,@a+Dptr

                 

                  Mov   Dptr,#NumberCodes

                  Movc  a,@a+Dptr

                  Mov   Yekan_Hezar,Sadgan

                  Mov   Sadgan,Dahgan

                  Mov   Dahgan,Yekan

                  Mov   Yekan,a

                  Ajmp  Back1

                  ;*******************************

      Multiplex:  Clr   Tr0

                  Mov   Tl0,#low Timer0_Preload

                  Mov   Th0,#high Timer0_Preload

                  Setb  Tr0

                  Inc   r2

 

                  Cjne  r2,#1,Show_Dahgan

                  Clr   Anode4

                  Setb  Anode1

                  Mov   seven_segment,Yekan

                  Reti

 

    Show_Dahgan:  Cjne  r2,#2,Show_Sahgan

                  Clr   Anode1

                  Setb  Anode2

                  Mov   seven_segment,Dahgan

                  Reti

 

    Show_Sahgan:  Cjne  r2,#3,Show_Yekanhezar

                  Clr   Anode2

                  Setb  Anode3

                  Mov   seven_segment,Sadgan

                  Reti

 

Show_Yekanhezar:  Mov   r2,#0

                  Clr   Anode3

                  Setb  Anode4

                  Mov   seven_segment,Yekan_Hezar

                  Reti

                  ;*******************************

                  Cseg  at 170H

         Kcode0:  Db    3,2,1,0

         Kcode1:  Db    7,6,5,4

         Kcode2:  Db    11,10,9,8

         Kcode3:  Db    15,14,13,12

                  ;*******************************

                  Cseg  at 180H

    NumberCodes:  Db Zero,One,Two,Three,Four,Five,Six,seven,Eight,Nine,_A,_B,_C,_D,_E,_F

                  End

 

به طوری که در نقشه ی شماتیک مشاهده می کنید سطرها به 4 بیت کم ارزشتر و ستونها نیز به 4 بیت پرارزشتر پورت P1 متصل شده اند . نرم افزار مربوط به صفحه کلید را می توان به 4 قسمت تقسیم کرد که عملکرد هر قسمت به شرح ذیل است .

در ابتدا برای اطمینان از رهایی کلید قبلی به همه ی سطرها صفر اعمال شده و ستونها مرتباً خوانده و وارسی می گردند تا همه ی ستونها در سطح منطقی یک باشند . اگر همه ی ستونها در سطح یک تشخیص داده شوند برنامه قبل از رفتن به مرحله بعدی با فراخوانی زیر روال Delay مکث کرده و سپس در قسمت بعدی منتظر فشرده شدن کلید جدید می ماند .

در قسمت دوم نرم افزار ، برای یافتن کلید فشرده شده ستونها بوسیله یک حلقه نامتناهی مکرراً پویش می شوند تا یکی از آنها حاوی صفر شود . ذکر این نکته ضروری است که لچ های خروجی متصل به سطرها هنوز صفرهای خود را که در مرحله ی قبل تهیه شده اند دارند . نرم افزار پس از تشخیص فشردگی کلید ، با فراخوانی زیر روال Delay ، 20 میلی ثانیه برای حذف جهش ناشی از اتصال کلید صبر کرده و دوباره ستونها را پویش می کند . این کار دو مزیت دارد : 1- اطمینان از اینکه اولین تشخص فشردگی به دلیل پارازیت و نویز نبوده و 2- تأخیر 20 میلی ثانیه ای موجب می شود تا تا فشردن کلید مذکور بعنوان چندین فشردگی تعبیر نشود . اگر بعد از تأخیر 20 میلی ثانیه ، باز هم کلید فشرده شده تشخیص داده شد ، برنامه برای یافتن سطری که کلید فشرده شده در آن است به مرحله ی بعدی می رود و در غیر این صورت به حلقه ی تشخیص کلید فشرده شده ی واقعی بر می گردد .

در قسمت سوم ، نرم افزار به منظور تشخیص سطری که کلید فشرده شده در آن است ، هر بار فقط به یکی از سطرها صفر اعمال کرده و ستونها را بررسی می کند . اگر همه ی ستون ها در سطح بالا باشند بدین معناست که کلید فشرده شده متعلق به این سطر نیست . بنابراین به سطر بعدی صفر اعمال کرده و این عمل را تا یافتن سطر متعلق به کلید تکرار می کند . پس از مشخص شدن سطر متعلق به کلید فشرده شده ، ابتدا آدرس برچسبی که کدهای مربوط به آن سطر در آن تعریف شده اند به درون ثبات Dptr بار شده (مثلاً به صورت Mov  Dptr,#Kcode0) و سپس برنامه برای یافتن کد مربوط به کلید فشرده شده به مرحله بعد می رود .

برای شناسایی کلید فشرده شده ، ثبات a که محتوی پورت متصل به صفحه کلید است ، از طریق پرچم نقلی به چپ چرخانده شده (با دستور Rlc  a) و صفر بودن پرچم نقلی بررسی می شود . اگر پرچم نقلی صفر باشد ابتدا محتوای ثبات a صفر شده و سپس با دستور Movc  a,@a+Dptr کد مربوط به کلید فشرده شده به درون ثبات a منتقل می شود . در صورتی که پرچم نقلی صفر نباشد ثبات Dptr برای اشاره به مکان بعدی در آدرس مورد نظر یک واحد افزایش می یابد .

در این مرحله ثبات a حاوی کد مربوط به کلید فشرده شده است که عددی بین 0 تا 15 می باشد . ولی برای نمایش این کد روی سون سگمنت می بایست به کد متناظر آن تبدیل شود که این کار نیز با استفاده از روش آدرس دهی اندیسی صورت می گیرد . البته می توان کدهای مربوط به اعداد و کاراکترها برای نمایش روی سون سگمنت را مستقیماً در محلهایی که با برچسب های Kcode0 تا 3 مشخص شده اند قرار داد تا دیگر به فرآیند تبدیل کد نیازی نباشد ولی در صورتی که بخواهیم با کدهای صفحه کلید عملیات محاسباتی انجام دهیم بایستی به همین روشی که در برنامه به کار رفته عمل کنیم .

اگر ترتیب اتصال سطرها و ستونها به پورتP1 مطابق نقشه ی شماتیک باشد ، با فشردن هر کلید عدد و یا کاراکتری که در نقشه ی شماتیک در زیر هر کلید است بر روی سون سگمنت نشان داده می شود . در صورتی که شما ترتیب دیگری را برای کلیدها انتظار دارید می توانید با دستکاری جدولی که در انتهای برنامه و با آدرسهای Kcode0 تا 3 تعریف شده به ترتیب مورد نظر برسید . برنامه بدون نقص بوده و توسط بنده امتحان شده است . شما فقط بایستی در بستن سخت افزار دقت لازم را به خرج دهید و با اطمینان میکروکنترلر پروگرام شده را استفاده کرده و از نتیجه لذت ببرید 


نظرات شما عزیزان:

نام :
آدرس ایمیل:
وب سایت/بلاگ :
متن پیام:
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

 

 

 

عکس شما

آپلود عکس دلخواه:



درباره وبلاگ


به وبلاگ من خوش آمدید
موضوعات
آخرین مطالب
آرشيو وبلاگ
بهمن 1390
دی 1390
اسفند 1389 بهمن 1389
افزایش آمار بازدید
پيوندها

ما را با نام افزایش بازدید رایگان سایت و وبلاگ لینک کنید و ادرس خود را نیز ثبت کنید







ورود اعضا:

آمار وب سایت:  

بازدید امروز : 501
بازدید دیروز : 420
بازدید هفته : 4035
بازدید ماه : 7890
بازدید کل : 160836
تعداد مطالب : 411
تعداد نظرات : 105
تعداد آنلاین : 1

 
 
 
افزایش آمار بازدید